package com.wuxinwudai.android.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.support.annotation.ColorInt;
import android.support.v7.widget.SwitchCompat;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.wuxinwudai.android.R;
import com.wuxinwudai.android.util.StringUtils;
import com.wuxinwudai.ap.Utils;

/**
 * CompoundSwitchCompat 类为 TextView 与 SwitchCompat 等的组合控件
 * @author 吾心无待 于 2016年08月05日
 */
public final class CompoundSwitchCompat extends LinearLayout {
    private TextView mtvSubject;//主题文本
    private SwitchCompat mSwitchCompat;//切换控件
    int dp10;
    //region 构造函数
    /**
     * 构造函数，初始化 CompoundSwitchCompat 类的新实例
     * @param context 上下文对象
     */
    public CompoundSwitchCompat(Context context) {
        this(context,null);
    }

    /**
     * 构造函数，初始化 CompoundSwitchCompat 类的新实例
     * @param context 上下文对象
     * @param attrs 属性列表
     * @param defStyleAttr 样式
     */
    public CompoundSwitchCompat(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context,context.getTheme().obtainStyledAttributes(attrs, R.styleable.CompoundSwitchCompat, defStyleAttr, 0));
    }

    /**
     * 构造函数，初始化 CompoundSwitchCompat 类的新实例
     * @param context 上下文对象
     * @param attrs 属性列表
     */
    public CompoundSwitchCompat(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context,context.obtainStyledAttributes(attrs,R.styleable.CompoundGoView));
    }
    //endregion

    //region 重要方法
    //初始化视图
    private void init(Context context, TypedArray ta){

        if (!isInEditMode()) {
            dp10 = (int)getResources().getDimension(R.dimen.dp10);
        }else{
            //设置 LinearLayout
            dp10 = Utils.dp2px(context.getResources(),10);
        }
        setOrientation(HORIZONTAL);
        setGravity(Gravity.CENTER_VERTICAL);
        setClickable(true);
        setBackgroundResource(R.drawable.selector_ff_fd);
        setPadding(dp10,dp10,dp10,dp10);
        //设置 Subject TextView
        mtvSubject = new TextView(context);
        mtvSubject.setTextColor(Color.parseColor("#FF333333"));
        addView(mtvSubject);
        //设置 值 TextView
        mSwitchCompat = new SwitchCompat(context);
        LayoutParams lpValue = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        lpValue.setMargins(0,0,dp10,0);
        mtvSubject.setLayoutParams(lpValue);
        addView(mSwitchCompat);
        //读取属性
        String subject = ta.getString(R.styleable.CompoundSwitchCompat_SubjectText);
        if(StringUtils.isNullOrWhiteSpace(subject))subject = "标题文本";
        mtvSubject.setText(subject);
        setChecked(ta.getBoolean(R.styleable.CompoundSwitchCompat_Checked,false));
    }
    //将布局放置到 onMeasure 以支持预览
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        LayoutParams lpSubject = new LayoutParams(0, LayoutParams.WRAP_CONTENT,1f);//把布局放置到 OnMeasure 以支持预览
        lpSubject.setMargins(dp10,0,0,0);
        mtvSubject.setLayoutParams(lpSubject);
    }
    //endregion

    //region 公有属性
    public void setChecked(boolean checked){
        mSwitchCompat.setChecked(checked);
    }

    /**
     * 获取状态是否选中
     * @return 是否是选中状态
     */
    public boolean isChecked(){
        return mSwitchCompat.isChecked();
    }

    /**
     * 设置主题文本
     * @param subject 主题文本
     */
    public void setSubjectText(String subject){
        mtvSubject.setText(subject);
    }

    /**
     * 获取主题文本
     * @return 主题文本
     */
    public String getSubjectText(){
        return mtvSubject.getText().toString();
    }
    /**
     * 设置主题文本颜色
     * @param color 颜色值
     */
    public void setSubjectTextColor(@ColorInt int color){
        mtvSubject.setTextColor(color);
    }
    //endregion
}
